{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append('./efficient-kan-master')\n",
    "from src.efficient_kan import KAN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import time\n",
    "import numpy as np \n",
    "import pandas as pd\n",
    "import torch\n",
    "import torchvision\n",
    "from torch.autograd import Variable\n",
    "from torch import nn\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "from torchvision.datasets import MNIST\n",
    "from torchvision import transforms as tfs\n",
    "from torchvision.utils import save_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n",
      "Failed to download (trying next):\n",
      "HTTP Error 403: Forbidden\n",
      "\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz to ./mnist\\MNIST\\raw\\train-images-idx3-ubyte.gz\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████| 9912422/9912422 [00:10<00:00, 916988.85it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./mnist\\MNIST\\raw\\train-images-idx3-ubyte.gz to ./mnist\\MNIST\\raw\n",
      "\n",
      "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n",
      "Failed to download (trying next):\n",
      "HTTP Error 403: Forbidden\n",
      "\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz to ./mnist\\MNIST\\raw\\train-labels-idx1-ubyte.gz\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████| 28881/28881 [00:00<00:00, 110998.94it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./mnist\\MNIST\\raw\\train-labels-idx1-ubyte.gz to ./mnist\\MNIST\\raw\n",
      "\n",
      "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n",
      "Failed to download (trying next):\n",
      "HTTP Error 403: Forbidden\n",
      "\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz to ./mnist\\MNIST\\raw\\t10k-images-idx3-ubyte.gz\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████| 1648877/1648877 [00:02<00:00, 759076.59it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./mnist\\MNIST\\raw\\t10k-images-idx3-ubyte.gz to ./mnist\\MNIST\\raw\n",
      "\n",
      "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n",
      "Failed to download (trying next):\n",
      "HTTP Error 403: Forbidden\n",
      "\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz\n",
      "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz to ./mnist\\MNIST\\raw\\t10k-labels-idx1-ubyte.gz\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████| 4542/4542 [00:00<00:00, 1138772.72it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./mnist\\MNIST\\raw\\t10k-labels-idx1-ubyte.gz to ./mnist\\MNIST\\raw\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "im_tfs = tfs.Compose([\n",
    "    tfs.ToTensor(),\n",
    "    tfs.Normalize((0.5, ), (0.5, ))\n",
    "#     tfs.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 标准化\n",
    "])\n",
    "\n",
    "train_set = torchvision.datasets.MNIST(\n",
    "    root=\"./mnist\", train=True, download=True, transform=im_tfs\n",
    ")\n",
    "val_set = torchvision.datasets.MNIST(\n",
    "    root=\"./mnist\", train=False, download=True, transform=im_tfs\n",
    ")\n",
    "# train_set = MNIST('/kaggle/working/mnist', transform=im_tfs)\n",
    "train_data = DataLoader(train_set, batch_size=128, shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义网络\n",
    "class autoencoder(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(autoencoder, self).__init__()\n",
    "        self.encoder = KAN([28 * 28, 256, 3])\n",
    "        self.decoder = KAN([3, 256, 28*28])\n",
    "\n",
    "#         以下为MLP的方法\n",
    "#         self.encoder = nn.Sequential(\n",
    "#             nn.Linear(28*28, 128),\n",
    "#             nn.ReLU(True),\n",
    "#             nn.Linear(128, 64),\n",
    "#             nn.ReLU(True),\n",
    "#             nn.Linear(64, 12),\n",
    "#             nn.ReLU(True),\n",
    "#             nn.Linear(12, 3) # 输出的 code 是 3 维，便于可视化\n",
    "#         )\n",
    "         \n",
    "#         self.decoder = nn.Sequential(\n",
    "#             nn.Linear(3, 12),\n",
    "#             nn.ReLU(True),\n",
    "#             nn.Linear(12, 64),\n",
    "#             nn.ReLU(True),\n",
    "#             nn.Linear(64, 128),\n",
    "#             nn.ReLU(True),\n",
    "#             nn.Linear(128, 28*28),\n",
    "#             nn.Tanh()\n",
    "#         )\n",
    "    def forward(self, x):\n",
    "        encode = self.encoder(x)\n",
    "        decode = self.decoder(encode)\n",
    "        return encode, decode"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 3])\n"
     ]
    }
   ],
   "source": [
    "net = autoencoder()\n",
    "x = Variable(torch.randn(1, 28*28)) # batch size 是 1\n",
    "code, _ = net(x)\n",
    "print(code.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "criterion = nn.MSELoss(reduction='sum')\n",
    "optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)\n",
    "\n",
    "def to_img(x):\n",
    "    '''\n",
    "    定义一个函数将最后的结果转换回图片\n",
    "    '''\n",
    "    x = 0.5 * (x + 1.)\n",
    "    x = x.clamp(0, 1)\n",
    "    x = x.view(x.shape[0], 1, 28, 28)\n",
    "    return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 1, Loss: 153.5089\n",
      "epoch: 2, Loss: 130.0365\n",
      "epoch: 3, Loss: 112.1306\n",
      "epoch: 4, Loss: 114.2532\n",
      "epoch: 5, Loss: 103.0043\n"
     ]
    }
   ],
   "source": [
    "start = time.time()\n",
    "# 开始训练自动编码器\n",
    "for e in range(5):\n",
    "    for im, _ in train_data:\n",
    "        im = im.view(im.shape[0], -1)\n",
    "        im = Variable(im)\n",
    "        # 前向传播\n",
    "        _, output = net(im)\n",
    "        loss = criterion(output, im) / im.shape[0] # 平均每张图像的损失\n",
    "        # 反向传播\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "    if (e+1) % 1 == 0: # 每个epoch将生成的图片保存一下\n",
    "        print('epoch: {}, Loss: {:.4f}'.format(e + 1, loss.item()))\n",
    "        pic = to_img(output.cpu().data)\n",
    "        if not os.path.exists('./simple_autoencoder'):\n",
    "            os.mkdir('./simple_autoencoder')\n",
    "        save_image(pic, './simple_autoencoder/image_{}.png'.format(e + 1))\n",
    "\n",
    "\n",
    "end = time.time()\n",
    "print(f\"训练所用时间为{end-start}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import cm\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "%matplotlib inline\n",
    "\n",
    "# 可视化结果\n",
    "view_data = Variable((train_set.data[:200].type(torch.FloatTensor).view(-1, 28*28) / 255. - 0.5) / 0.5)\n",
    "encode, _ = net(view_data)    # 提取压缩的特征值\n",
    "fig = plt.figure(2)\n",
    "ax = fig.add_subplot(projection='3d')\n",
    "# ax = Axes3D(fig)    # 3D 图\n",
    "# x, y, z 的数据值\n",
    "X = encode.data[:, 0].numpy()\n",
    "Y = encode.data[:, 1].numpy()\n",
    "Z = encode.data[:, 2].numpy()\n",
    "values = train_set.targets[:200].numpy()  # 标签值\n",
    "for x, y, z, s in zip(X, Y, Z, values):\n",
    "    c = cm.rainbow(int(255*s/9))    # 上色\n",
    "    ax.text(x, y, z, s, backgroundcolor=c)  # 标位子\n",
    "ax.set_xlim(X.min(), X.max())\n",
    "ax.set_ylim(Y.min(), Y.max())\n",
    "ax.set_zlim(Z.min(), Z.max())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x241d9441670>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7969niTvpZde8vbu3et99dVXnud53m9/+1svJSXF27Rpk7d//37vrrvu8nJzc71Tp045Xnn/utB+aGlp8Z544gmvvLzcq6mp8bZs2eJ9//vf98aPH++1t7e7Xnq/Wbx4sRcIBLzS0lKvvr6+99LW1tZ7m0cffdQbPXq0t23bNm/37t3ejBkzvBkzZjhcdf/7rv1QVVXlvfDCC97u3bu9mpoab9OmTd7YsWO9mTNnOl55X4OigDzP81599VVv9OjRXlxcnDd9+nRvx44drpcUdvfee6+XlZXlxcXFeVdeeaV37733elVVVa6XNeA+/PBDT9JZlwULFnied/pU7GeeecbLyMjw/H6/N3v2bK+ystLtogfAhfZDW1ubN2fOHG/kyJFebGysN2bMGG/RokVD7pe0c33/krw1a9b03ubUqVPez372M++KK67wEhMTvbvvvturr693t+gB8F374dChQ97MmTO91NRUz+/3e1dffbX3y1/+0gsGg24X/i38OQYAgBMR/xoQAGBoooAAAE5QQAAAJyggAIATFBAAwAkKCADgBAUEAHCCAgIAOEEBAQCcoIAAAE5QQAAAJyggAIAT/w9+xs7ON02A3AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "code = Variable(torch.FloatTensor([[-2.55, -1.35, -3.88]])) # 给定一个编码观察生成的图片\n",
    "decode = net.decoder(code)\n",
    "decode_img = to_img(decode).squeeze()\n",
    "decode_img = decode_img.data.numpy() * 255\n",
    "plt.imshow(decode_img.astype('uint8'), cmap='gray') # 生成图片 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kaggle": {
   "accelerator": "none",
   "dataSources": [
    {
     "datasetId": 5276220,
     "sourceId": 8778613,
     "sourceType": "datasetVersion"
    }
   ],
   "dockerImageVersionId": 30732,
   "isGpuEnabled": false,
   "isInternetEnabled": true,
   "language": "python",
   "sourceType": "notebook"
  },
  "kernelspec": {
   "display_name": "kan",
   "language": "python",
   "name": "kan"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
